// 广告相关的路由
const express = require('express')
const { resolve, join } = require('path')
const advModel = require('../db/models/adv')

const router = express.Router()

function mw(req, res, next) {
  console.log('mw执行了')
  next()
}
// 添加广告的路由
router.post('/addAdv', async (req, res) => {
  // 收集数据

  // 注意: req.fields中拿到的数据,就是一些普通的字符串,这个值可以直接存储到数据库中. 但是req.files拿到的是上传到服务器的图片的信息对象.对象中有这张图片在服务器中存储的位置.我们需要根据这些信息,拼接出来一个可以在浏览器端访问到这个图片的url地址
  const { title, link, category } = req.fields
  const { img } = req.files

  // 请求图片的路径应该是后面的这种格式 :  http://localhost:5000/uploadDir/upload_aa65d97a082ca11ed299a1276162d581.jpg
  //  \ 在js中是一个特殊字符,叫做转义符. 可以把特殊字符串转成普通字符,也可以把普通字符转成特殊字符. 现在写的\\ 就是把转义符自己转移成普通字符 \
  const filename = img.path.split('\\')[2]
  // 注意: resolve会自动帮我们拼接__dirname.所以使用join
  //   const img_url = resolve('http://localhost:5000/uploadDir', filename)
  // const img_url = join('http://localhost:5000/uploadDir', filename)
  const img_url = `http://localhost:5000/uploadDir/${filename}`

  //把收集好的数据,存储到数据库中
  try {
    await advModel.create({ title, link, category, img_url })
    res.send({ code: 2, message: '广告添加成功', status: true, data: null })
  } catch (error) {
    res.send({
      code: 1,
      message: '广告添加失败,请稍后再试',
      status: false,
      data: null,
    })
  }
})

// 获取广告数据
router.get('/getAdvs', mw, async (req, res) => {
  try {
    const advs = await advModel.find()
    res.send({
      code: 2,
      message: '获取成功',
      status: true,
      data: advs,
    })
  } catch (error) {
    res.send({
      code: 1,
      message: '获取失败,稍后重试',
      status: false,
      data: null,
    })
  }
})

// 删除一条广告数据

router.get('/delAdv', async (req, res) => {
  const { id } = req.query
  try {
    await advModel.deleteOne({ _id: id })
    // 由于删除数据之后,前端需要展示最新的数据.所以后端直接将最新数据响应给前端,这样可以减少一次请求
    const advs = await advModel.find()
    res.send({
      code: 2,
      message: '删除成功',
      status: true,
      data: advs,
    })
  } catch (error) {
    res.send({
      code: 1,
      message: '删除失败,稍后重试',
      status: false,
      data: null,
    })
  }
})

// 修改一条广告数据
router.post('/updateAdv', async (req, res) => {
  // 收集数据
  const { _id, title, link, category } = req.fields
  const { img } = req.files
  console.log(img)
  // img有值说明上传了新图片,就需要覆盖原来的img_url
  if (img.size) {
    // 拼接新图片的url地址
    const filename = img.path.split('\\')[2]
    const img_url = `http://localhost:5000/uploadDir/${filename}`

    await advModel.updateOne(
      { _id },
      {
        $set: {
          title,
          link,
          category,
          img_url,
        },
      }
    )
  } else {
    // 没有上传新图片,就不需要覆盖原来的img_url
    await advModel.updateOne(
      { _id },
      {
        $set: {
          title,
          link,
          category,
        },
      }
    )
  }

  const advs = await advModel.find()

  res.send({
    code: 2,
    message: '修改成功',
    status: true,
    data: advs,
  })
})

// 返回一条广告数据的接口
router.get('/getOneAdv', async (req, res) => {
  const { _id } = req.query
  try {
    const adv = await advModel.findOne({ _id })
    res.send({
      code: 2,
      message: '获取一条广告数据成功',
      status: true,
      data: adv,
    })
  } catch (error) {
    res.send({
      code: 1,
      message: '获取一条广告数据失败',
      status: false,
      data: null,
    })
  }
})

module.exports = router
